home *** CD-ROM | disk | FTP | other *** search
/ The Games Machine 76 / XENIATGM66.iso / Indiana Jones / Indiana Jones.exe / RESOURCE / PREVIEW.GOB / cog_15_aet_skitoscene.cog < prev    next >
Text File  |  1999-11-15  |  12KB  |  475 lines

  1. # Jones 3D Cog Script
  2. #
  3. # 15_AET_SkitoScene.cog
  4. #
  5. # Ham Sandwich!
  6. #
  7. # This cog handles the cutscene for Indy finding Marduk's lair.
  8. #
  9. # Later, when Indy shows Marduk what for, we use these actors and such to show Marduk's
  10. # demise.
  11. #
  12. # [PAZ] [TL] & [HB]
  13. #
  14. # (C) 1999 LucasArts Entertainment Co. All Rights Reserved
  15. # ========================================================================================
  16.  
  17. symbols
  18.  
  19.     message     startup
  20.     message        crossed
  21.     message        entered
  22.     message        taken
  23.     message        user1                                        # Message received by Scholl's boss cog.
  24.     
  25.     keyframe    in_falling=in_jump_fall.key            local
  26.     keyframe    in_ltarmup=0in_leftarm_1_1.key        local    
  27.     keyframe    in_rtarmup=0in_armsout_1_1.key        local
  28.     keyframe    in_botharmsup=0in_armsup_1_1.key    local
  29.     keyframe    in_armsCrossed=0in_stand2.key        local
  30.     keyframe    in_crossArms=0in_stand1_bd_2.key    local
  31.  
  32.     keyframe    bighit=wm_bighit.key                local    # Marduk's big hit animation
  33.     
  34.     model        torso=torso_wm_nogem.3do               local    # Marduk's chest w/no gem
  35.     
  36.      sound        danger1=mus_gen_danger3.wav            local    # these sounds are placeholders!
  37.     sound        defeat=mus_inf_cutscene1d.wav        local
  38.     
  39.     sound        doorstart=aet_dais_start.wav           local
  40.     sound        doormove=aet_dais_move.wav               local
  41.     sound        doorstop=aet_dais_stop.wav               local
  42.  
  43.     sound        screech=aet_mr_defeat.wav            local         
  44.     sound        chargeHere=at02j04.wav                local            
  45.     sound        ugly=at02J02.wav                    local    
  46.     sound        welcome=at02e03.wav                    local
  47.     sound        mardukloop=aet_mr_fly.wav            local    
  48.  
  49.     thing        player                                local
  50.     thing        indy
  51.     
  52.     thing        marduk                                        # Marduk actor
  53.     thing        mardukspot1                            nolink
  54.     
  55.     thing        mcs_cam_1                            nolink
  56.     thing        mcs_cam_2                            nolink
  57.     thing        mcs_cam_3                            nolink
  58.  
  59.     thing        mcs_ct_1                            nolink
  60.     thing        mcs_ct_2                            nolink
  61.     thing        mcs_ct_3                            nolink
  62.     thing        mardroptarg                            nolink
  63.     
  64.     thing        mcs_mk_1                            nolink
  65.     thing        uberindyspot1                        nolink
  66.             
  67.     thing        door1                                        # Marduk entry door(s)
  68.     thing        door2
  69.     thing        door3
  70.     
  71.     thing        probe                                        # lightning probe
  72.  
  73.     thing        sc3start                                    # start indy here
  74.  
  75.     thing        mardukspot3                                    # Marduk's mark for cs
  76.     thing        mardukspot4                                    # Where he retreats
  77.     thing        offtarg                                local    # Spin target
  78.  
  79.     thing        gemcreate                                    # where gem created
  80.     
  81.  
  82.     cog            mardukCog                                    # Link to AI cog
  83.     cog         hint_cog
  84.  
  85.     surface        trig3                                        # starts the scene
  86.  
  87.     sector        trigger
  88.     sector        camsector                            local
  89.  
  90.     template    tpl_gem_move=mardukkeymove                local    # template for gem move thing creation
  91.     template    tpl_gem_key=mardukkey                    local    # template for gem item creation
  92.     template    tpl_ghost=ghost                        local
  93.     
  94.     vector        v_camspot                            local
  95.  
  96.     int            gem                                    local    # create on fly
  97.     int            itemgem                                local
  98.     int            onetime=0                            local
  99.     int            doneVoice=1                            local    
  100.     int            cursound                            local
  101.     int            in_keytrack1                        local
  102.     int            in_keytrack2                        local
  103.     int            mr_colltype                            local
  104.     int            pl_colltype                            local
  105.     int            mardukchannel                        local
  106.  
  107. end
  108.  
  109. # ==============================================================================
  110.  
  111. code
  112.  
  113. # ..............................................................................
  114.  
  115. startup:
  116.  
  117.     player=GetLocalPlayerThing();
  118.         
  119.     AISetCutsceneMode(marduk); # (temp)
  120.  
  121.     global10 = 0; # <---INIT GLOBAL VAR
  122.     
  123.     # Hide Marduk...
  124.     SetThingFlags(marduk, 0x80000);        
  125.     
  126.     # Turn probe whip flags off...
  127.     ClearThingFlags(probe, 0x00000008);        
  128.     ClearThingFlags(probe, 0x80000000);    
  129.     SetActorFlags(probe, 0x100000); # no target
  130.  
  131.     return;
  132.     
  133. # ..............................................................................
  134.  
  135. entered:
  136.     
  137.     player = GetLocalPlayerThing();
  138.  
  139.     if ((GetSenderRef() == door1) || (GetSenderRef() == door2) || (GetSenderRef() == door3))
  140.     {        
  141.         if ((doneVoice != 0) || (global10 != 0))
  142.         {
  143.             return;
  144.         }
  145.  
  146.         doneVoice = 1;
  147.         global10 = 1;
  148.         PlayVoice(player, chargeHere, 1.0, 0);
  149.  
  150.         return;
  151.     }
  152.  
  153.     if ((GetSenderRef() != trigger) || (GetSourceRef() != player) || (onetime != 0))
  154.     {
  155.         return;
  156.     }
  157.                                 
  158.     onetime = 1; # do once only       
  159.     
  160.     # Music...
  161.     PlaySoundLocal(danger1, 1.0, 0.0, 0x0, 0);
  162.  
  163.     # Prep for cutscene...
  164.     Sleep(0.2);
  165.  
  166.     # Indy appears in mid-air and drops into arena...    
  167.     TeleportThing(player, sc3start);
  168.     
  169.     # Prep camera & cut...
  170.     SetCameraLookInterp(2, 0);
  171.     SetCameraPosInterp(2, 0);
  172.     SetCameraFocus(2, mcs_cam_1);
  173.     SetCameraSecondaryFocus(2, player);
  174.     SetCurrentCamera(2);
  175.     SetCameraFOV(85, 0, 0.0);
  176.     Sleep(0.01);
  177.     SetCameraFOV(75, 1, 2.0);
  178.  
  179.     # Engine needs time to find player exiting aethereal sector...
  180.     SetActorFlags(player, 0x200000);
  181.     StartCutscene(1);
  182.  
  183.     # Wait for slide to finish...
  184.     while (IsThingMoving(player) != 0)
  185.     {
  186.         Sleep(0.1);
  187.     }
  188.     Sleep(0.1);
  189.     MakeMeStop();
  190.     TeleportThing(indy, player);
  191.     DeselectWeaponWait(player);
  192.     CopyPlayerHolsters(player, indy);
  193.     SetThingFlags(player, 0x80000);    
  194.     ClearThingFlags(indy, 0x80000); # reveal actor
  195.     Sleep(0.3);
  196.  
  197.     # AISetMoveThing(indy, mcs_mk_1, 1);
  198.     # Sleep(0.3);
  199.  
  200.     # Pan off to door...
  201.     SetCameraLookInterp(2, 1);
  202.     SetCameraPosInterp(2, 1);
  203.     SetCameraInterpSpeed(2, 3.5);
  204.     Sleep(0.01);
  205.     SetCameraFocus(2, mcs_cam_2);
  206.     SetCameraSecondaryFocus(2, mcs_ct_1);
  207.     SetCameraFOV(75, 1, 3.5);
  208.     Sleep(3.5);
  209.              
  210.     # Move & hide player...
  211.     TeleportThing(player, uberindyspot1); 
  212.     SetThingFlags(player, 0x80000);
  213.     
  214.     # Reposition player & actor & aim them toward doors...
  215.     TeleportThing(indy, uberindyspot1); 
  216.  
  217.     # Enter the dragon...
  218.     ClearThingFlags(marduk, 0x80000);
  219.     mr_colltype = GetCollideType(marduk);
  220.     SetCollideType(marduk, 0);
  221.     SetThingAlpha(marduk, 0.0);
  222.     AIEnableHeadTracking(indy, marduk);    
  223.  
  224.     # Doors open...
  225.     MoveToFrame(door1, 1, 1.0);    
  226.     MoveToFrame(door2, 1, 1.0);    
  227.     MoveToFrame(door3, 1, 1.0);
  228.     MoveToFrame(probe, 1, 2.0);
  229.  
  230.     PlaySoundLocal(doorstart, 1.0, 0, 0x0, 0);    
  231.     cursound = PlaySoundLocal(doormove, 1.0, 0, 0x1, 0);
  232.     WaitForStop(door1);
  233.     StopSound(cursound, 0.0);
  234.     PlaySoundLocal(doorstop, 1.0, 0, 0x0, 0);
  235.         
  236.     # Marduk appears...
  237.     mardukchannel = PlaySoundLocal(mardukloop, 1.0, 0, 0x1, 0);
  238.     
  239.     AISetMoveSpeed(marduk, 0.5);
  240.     AiSetMoveThing(marduk, mardukspot1, 0);
  241.     ThingFadeAnim(marduk, 0.0, 1.0, 0.4, 0);
  242.     
  243.     # Pan up...
  244.     SetCameraInterpSpeed(2, 1.8);
  245.     Sleep(0.01);
  246.     SetCameraSecondaryFocus(2, mcs_ct_2);
  247.     SetCameraFOV(35, 1, 1.8);
  248.     StopSound(cursound, 0.5);
  249.     Sleep(1.0);
  250.     
  251.     # Big M screeches (or whatever)...
  252.     PlaySoundLocal(screech, 1.0, 0.0, 0x0, 0);
  253.     
  254.     # Close doors...
  255.     MoveToFrame(door1, 0, 1.0);    
  256.     MoveToFrame(door2, 0, 1.0);    
  257.     MoveToFrame(door3, 0, 1.0);
  258.     
  259.     PlaySoundLocal(doorstart, 1.0, 0, 0x0, 0);    
  260.     cursound = PlaySoundLocal(doormove, 1.0, 0, 0x1, 0);
  261.     WaitForStop(door1);
  262.     StopSound(cursound, 0.0);
  263.     PlaySoundLocal(doorstop, 1.0, 0, 0x0, 0);
  264.         
  265.     # Pull back...
  266.     SetCameraInterpSpeed(2, 2.5);
  267.     Sleep(0.01);
  268.     SetCameraFocus(2, mcs_cam_3);
  269.     SetCameraSecondaryFocus(2, mcs_ct_3);
  270.     SetCameraFOV(90, 1, 2.0); # was 2.5
  271.     Sleep(1.0);
  272.     StopSound(cursound, 0.5);
  273.     Sleep(1.0); # was 1.5
  274.  
  275.     # Indy: "...one of those angry gods...ugly too..."
  276.     cursound = PlayVoice(indy, ugly, 1.0, 0);
  277.     in_keytrack2 = PlayKey(indy, in_armsCrossed, 2, 0x10, 0);
  278.     PlayKey(indy, in_crossArms, 4, 0x12, 0);
  279.     WaitForSound(cursound);
  280.  
  281.     cursound = PlayVoice(marduk, welcome, 1.0, 0);
  282.     Sleep(4.0);
  283.     StopKey(indy, in_keytrack2, 0.5);
  284.     WaitForSound(cursound);
  285.  
  286.     # Wake Marduk up...
  287.     AIClearCutsceneMode(marduk);
  288.  
  289.     # Reset stuff...
  290.     SetCameraLookInterp(2, 0);
  291.     SetCameraPosInterp(2, 0);
  292.     AIDisableHeadTracking(indy);
  293.     AISetMoveSpeed(indy, 1.0);
  294.     AISetMoveSpeed(marduk, 1.0);    
  295.     ## SetCollideType(player, pl_colltype);
  296.     SetCollideType(marduk, mr_colltype);
  297.     
  298.     # Return player to game...
  299.     TeleportThing(player, indy);
  300.     StopKey(indy, in_keytrack2, 0.0);
  301.     SetThingFlags(indy, 0x80000);
  302.     ClearThingFlags(player, 0x80000);
  303.         
  304.     # Prepare swing back to follow-cam...
  305.     SetCameraPosition(1, GetThingPos(mcs_cam_3));
  306.     SetCurrentCamera(1);
  307.     ResetCameraFOV(0, 0.0);
  308.     
  309.     EndCutScene();
  310.     ClearActorFlags(player, 0x200000); # player in control
  311.  
  312.     StopSound(mardukchannel, 0.0);
  313.  
  314.     # Give player a moment to get ready...
  315.     Sleep(1.0);
  316.     
  317.     # Wake up Marduk AI cog....
  318.     SendMessageEx(mardukCog, 27, 0, 0, 0, 0);
  319.     
  320.     return;
  321.     
  322. # ..............................................................................
  323.  
  324. user1:
  325.  
  326.     # NOTE: Once Marduk is thoroughly pummeled, 
  327.     # Scholl's cog will send this message...
  328.  
  329.     # Prep for cutscene...
  330.     MakeMeStop();
  331. #    SetActorFlags(player, 0x200000);
  332.     StartCutscene(1);
  333.     
  334.     SendMessage(hint_cog, user0);
  335.     
  336.     # Play defeat music...
  337.     PlaySoundLocal(defeat, 1, 0, 0x0, 0);
  338.  
  339.     # Disable player...
  340. #    StopThing(player); # right now
  341. #    PlayMode(player, 1, 0); # get him into a nice stand
  342.     
  343.     # Move Marduk to center of room...
  344.     mardukchannel = PlaySoundLocal(mardukloop, 1.0, 0, 0x1, 0);
  345.     AiSetCutsceneMode(marduk);
  346.  
  347.     AISetMoveSpeed(marduk, 2.0);
  348.     AISetLookThing(marduk, mardukspot3);
  349.     AISetMoveThing(marduk, mardukspot3, 0);
  350.  
  351.     # Cut to Marduk...
  352.     SetCameraLookInterp(2, 0);
  353.     SetCameraPosInterp(2, 0);
  354.     SetCameraFocus(2, mcs_cam_1);
  355.     SetCameraSecondaryFocus(2, marduk);
  356.     SetCurrentCamera(2);
  357.     AIWaitForStop(marduk);
  358.  
  359.     # RT: Put away and lose mirror
  360.     DeselectWeapon(player);
  361.     ChangeInv(player, 50, -1.0);
  362.  
  363.     # Spinneth...
  364.     v_camspot = VectorAdd(VectorTransformToOrient(marduk, '0.2 0.2 0.0'), GetThingPos(marduk));    
  365.     camsector = FindNewSectorFromThing(marduk, v_camspot);
  366.     offtarg = CreateThingAtPos(tpl_ghost, camsector, v_camspot, '0 0 0');
  367.     CaptureThing(offtarg);
  368.     AttachThingToThing(offtarg, mardukspot3);
  369.     AIEnableBodyTracking(marduk, offtarg);    
  370.     Rotate(mardukspot3, 980, 1, 5.0);
  371.     
  372.     # Zoom in while playing the animation of him writhing...
  373.     SetCameraFOV(65, 1, 2.5);
  374.     PlayKey(marduk, bighit, 0, 0x02, 1); # 1.7s
  375.        
  376.     # Switch out the torso mesh...
  377.     SetThingMesh(marduk, 0, torso, 0);    
  378.     
  379.     #...create the gem...
  380.     gem = CreateThing(tpl_gem_move, gemcreate);
  381.     CaptureThing(gem);
  382.     Sleep(0.01);
  383.     
  384.        #...and drop the gem to the floor...
  385.     MoveToFrame(gem, 1, 3.0);
  386.     Sleep(0.8);
  387.     
  388.     # Make M writhe while probe retreats...
  389.     PlayKey(marduk, bighit, 0, 0x2, 0);
  390.     MoveToFrame(probe, 0, 3.0);
  391.     
  392.     # Prep cam...
  393.     SetCameraFOV(90, 1, 1.5);
  394.     SetCameraLookInterp(2, 1);
  395.     SetCameraInterpSpeed(2, 1.0);
  396.     Sleep(0.01);
  397.  
  398.     # Marduk bails...
  399.     SetCollideType(marduk, 0);
  400.     AISetMoveSpeed(marduk, 1.0);
  401.     AiSetMoveThing(marduk, mardukspot4, 0);
  402.     SetCameraSecondaryFocus(2, mardroptarg);
  403.     
  404.     # Doors open as he nears...
  405.     MoveToFrame(door1, 1, 3.0);    
  406.     MoveToFrame(door2, 1, 3.0);    
  407.     MoveToFrame(door3, 1, 3.0);
  408.     
  409.     PlaySoundLocal(doorstart, 1.0, 0, 0x0, 0);    
  410.     cursound = PlaySoundLocal(doormove, 1.0, 0, 0x1, 0);
  411.     WaitForStop(door1);
  412.     StopSound(cursound, 0.0);
  413.     PlaySoundLocal(doorstop, 1.0, 0, 0x0, 0);
  414.     
  415.     Sleep(1.5);
  416.     ThingFadeAnim(marduk, 1.0, 0.0, 0.5, 0);
  417.  
  418.     StopSound(mardukchannel, 0.0);
  419.  
  420.     # Doors close...
  421.     MoveToFrame(door1, 0, 2.0);    
  422.     MoveToFrame(door2, 0, 2.0);
  423.     MoveToFrame(door3, 0, 2.0);
  424.     
  425.     PlaySoundLocal(doorstart, 1.0, 0, 0x0, 0);    
  426.     cursound = PlaySoundLocal(doormove, 1.0, 0, 0x1, 0);
  427.     WaitForStop(door1);
  428.     StopSound(cursound, 0.0);
  429.     PlaySoundLocal(doorstop, 1.0, 0, 0x0, 0);
  430.     
  431.     //WaitForStop(door1);
  432.     Sleep(1.0);
  433.  
  434.     # Dust off Marduk...
  435.     SetThingAlpha(marduk, 1.0);
  436.     SetCollideType(marduk, mr_colltype);
  437.     SetThingFlags(marduk, 0x80000);        
  438.     
  439.     # Replace gem move thing with gem item...
  440.     itemgem = CreateThing(tpl_gem_key, gem);
  441.     CaptureThing(itemgem);
  442.     DestroyThing(gem);
  443.         
  444.     # Back to play...
  445.     DestroyThing(offtarg);
  446.     SetCameraLookInterp(2, 0);
  447.     SetCameraPosInterp(2, 0);
  448.     v_camspot = VectorAdd(VectorTransformToOrient(player, '0.15 -0.02 0.05'), GetThingPos(player));
  449.     SetCameraPosition(1, v_camspot);
  450.     SetCurrentCamera(1);
  451.     ResetCameraFOV(0, 0.0);
  452.         
  453.     SetThingFlags(probe, 0x00000008);        
  454.     SetThingFlags(probe, 0x80000000);        
  455.     ClearActorFlags(probe, 0x100000); # allow target
  456.     doneVoice = 0;
  457.     
  458.     EndCutScene();
  459.     ClearActorFlags(player, 0x200000);
  460.  
  461.     return;   
  462.  
  463. # ..............................................................................
  464.  
  465. taken:
  466.  
  467.     if (GetSenderRef() == itemgem)
  468.     {
  469.         SendMessage(hint_cog, user1);
  470.     }
  471.  
  472.     return;   
  473.  
  474. end
  475.